package com.atguigu06.polymorphism;

/**
 * ClassName: PersonTest
 * Description:
 *
 * @Author liu
 * @Create 2024/10/30 20:47
 * @Version 1.0
 */
public class PersonTest1 {
    public static void main(String[] args) {
        Person p1 = new Man();
        //不能直接调用子类特有的结构
//        p1.earnMoney();
//        System.out.println(p1.isSmoking);
//

        //如果想调用，向下转型，强制转型，使用强转符。
        Man m1 = (Man) p1;
        m1.earnMoney();
        System.out.println(m1.isSmoking);

        System.out.println(p1 == m1);//p1和m1指向堆空间中的同一个对象。

        /*
         * 向下转型可能会出现：类型转换异常（ClassCastException）
         * 是否有那个方法，用instanceof 来判断
         * */
        Person p2 = new Woman();
//        Man m2 = (Man)p2;
//        m2.earnMoney();


        //但类要从小到大排序
        if(p2 instanceof Man){
            Man m2 = (Man)p2;
            m2.earnMoney();
        }
        if(p2 instanceof Woman){
            System.out.println("Woman");
        }

        if(p2 instanceof Person){
            System.out.println("Person");
        }
        if(p2 instanceof Object){
            System.out.println("Object");
        }
    }

}
